Argo CD
https://gyazo.com/7699ee25827a6f0e335d86ac8326cddb
Getting Started
code: (bash)
kubectl create namespace argocd
kubectl wait -n argocd --for=condition=available deployment --all --timeout=300s
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
ARGOCD_INITIAL_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
Sync Phases and Waves
code: (yaml)
metadata:
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/sync-wave: "5"
Phases
PreSync
Sync
PostSync
Waves
0: CRD
1: include CRD
Best Practices
アプリケーションのコードとアプリケーションの設定をきれいに分離することができます。CI ビルド全体をトリガーすることなく、マニフェストのみを変更したい場合があります。たとえば、Deployment spec のレプリカの数を増やすだけなら、ビルドをトリガする必要はないでしょう。
監査ログをよりきれいにする。監査用に、設定のみを保持するリポジトリは、通常の開発活動によるチェックインから生じるノイズを排除し、どのような変更が行われたかをより明確にGitの履歴に残すことができます。
アプリケーションは、複数の Git リポジトリから構築されたサービスから構成されているかもしれませんが、単一のユニットとしてデプロイされます。多くの場合、マイクロサービス・アプリケーションは、異なるバージョン管理方式やリリース・サイクルのサービスで構成されています(例:ELK、Kafka + ZooKeeper)。マニフェストを単一のコンポーネントのソースコードリポジトリのいずれかに格納することは理にかなっていないかもしれません。
アクセスの分離。アプリケーションを開発している開発者は、意図的であろうとなかろうと、必ずしも本番環境にプッシュできる/すべき人とは限りません。リポジトリを分けることで、コミットアクセスはソースコードレポに与え、アプリケーションの設定レポには与えないようにすることができます。
CI パイプラインを自動化している場合、マニフェストの変更を同じ Git リポジトリにプッシュすると、ビルド・ジョブと Git コミットのトリガーが無限ループになる可能性があります。設定の変更をプッシュするための別のリポジトリがあれば、このような事態を防ぐことができます。
Reference
Demo
すでに dependency が使用されている Chart には適用できなかった
メモ
namespace リソースを管理すると replace の時に削除されるので大変危険 -> 対策を考える
ArgoCD で namespace を管理する方法
yaml で管理して削除されないアノテーションをつける
code: app.yaml
syncOptions:
- CreateNamespace=true # これに設定して namespace 作成を ArgoCD 管理下に移す
Live Repository
Helm
Helm のみでリソースが完結する場合
inline でパラメータや values が設定できる
外部の values ファイルを参照する
Git 管理されている形式で取得すれば良い
https
helm+git
helm dep up による問題
Sub Chart を values.yaml で定義できない
ArgoCD から利用する場合は Helm ではない
values.yaml に Application を定義すると renovate が認識しない
Kustomize
helm chart がないもの or helm だけで完結しないもの
自身のリポジトリで作成
Helm
--enable-helm オプション
Issue
Capability 変数(k8s の API リソースの有無による条件分岐)が動作しない
他のアプリケーションには Helm vaules or Kustomize が格納
code: (bash)
base/ # あまり使わないかも
values.yaml
overlays/
kustomization.yaml # kustomize の場合
values.yaml
開発環境の実現
手元と ArgoCD での実行内容を同じにしたい
argocd CLI を用いる
手元で変更を行える
ArgoCD 自身の同期は off
他のアプリケーションの設定を変更するため
変更するアプリの自動同期を off
argocd app set ${APP} --sync-policy=none
ローカルリポジトリと同期
repoURL が同じリポジトリである必要あり
Helm
argocd app set ${APP} --values-literal-file=/path/to/values.yaml
argocd app unset ${APP} --values-literal
Kustomize
argocd app sync ${APP} --local=/path/to/local-dir
実行ホストが repo-server ではなく localhost になる?
実行ホストにも avp が必要